package com.jeequan.components.http;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.io.Serializable;


/**
 * @author roy
 */
@Data
@ConfigurationProperties(prefix = "easy.http.connection")
public class HttpProperties implements Serializable {

    /**
     * http保持空闲连接存活的最大时间（秒），默认60秒
     */
    private int keepAliveTimeout = 60;

    /**
     * 应用最大连接数=所有路由连接数总和，默认：300，maxtTotal=maxPerRoute*路由数
     * 一个ip+port，视为一个路由
     */
    private int maxTotal = 300;

    /**
     * 单路由的最大连接数，默认：100
     */
    private int maxPerRoute = 100;

    /**
     * 发送失败重试次数，默认：0，代表不重试
     */
    private int failRetry = 0;

    /**
     * 读取数据响应超时时间（毫秒），默认：10000ms
     */
    private int socketTimeout = 10000;

    /**
     * 建立http连接超时时间（毫秒），默认：2000ms
     */
    private int connectTimeout = 2000;

    /**
     * 当连接耗尽时，等待可用http连接的超时时间（毫秒），应快速失败，及早熔断
     */
    private int connectionRequestTimeout = 1000;

    /**
     * 连接池内空闲连接最大存活时间（秒），超过该时间，自动清理
     */
    private int maxIdleTime = 30;

    /**
     * 当请求是https时，是否对请求URL域名和证书域名做一致性校验，默认开启：true
     */
    private boolean hostVerifier = true;

    /**
     * 自签名CA根证书(root.pem)文件路径
     * 当trust-all-site=true时，忽略该配置
     */
    private String trustCertPath;

    /**
     * 是否信任所有站点，默认为：false，true代表不对证书合法性做校验，生产环境不建议开启
     */
    private boolean trustAllSite = false;

}
